// eslint.config.mjs
import vue from 'eslint-plugin-vue'
import tsEslint from '@typescript-eslint/eslint-plugin'
import parserTs from '@typescript-eslint/parser'
import vueParser from 'vue-eslint-parser'
import pluginUnusedImports from 'eslint-plugin-unused-imports'

import js from '@eslint/js'
import prettierPlugin from 'eslint-plugin-prettier'
import globals from 'globals'
import configPrettierRecommended from 'eslint-plugin-prettier/recommended'

export default [
  js.configs.recommended,
  configPrettierRecommended,
  {
    // 针对 Vue 文件的配置
    files: ['**/*.vue'],
    languageOptions: {
      parser: vueParser,
      parserOptions: {
        // 添加 parserOptions
        parser: parserTs,
        ecmaVersion: 2021,
        sourceType: 'module',
        ecmaFeatures: {
          jsx: true,
        },
      },
      ecmaVersion: 2021,
      sourceType: 'module',
      globals: {
        ...globals.browser,
      },
    },
    plugins: {
      vue,
      '@typescript-eslint': tsEslint,
      'unused-imports': pluginUnusedImports,
      prettier: prettierPlugin, // 注册 prettier 插件
    },
    rules: {
      // 强制使用 import type 语法
      '@typescript-eslint/consistent-type-imports': ['error', { fixStyle: 'inline-type-imports' }],
      // 自动移除未使用的导入
      // 'unused-imports/no-unused-imports': 'warn', // 强制删除未使用的导入
      'unused-imports/no-unused-vars': [
        'warn',
        {
          vars: 'all',
          varsIgnorePattern: '^_', // 忽略以下划线开头的变量
          args: 'after-used',
          argsIgnorePattern: '^_', // 忽略以下划线开头的函数参数
        },
      ],
      'no-unused-vars': [
        'error',
        // we are only using this rule to check for unused arguments since TS
        // catches unused variables but not args.
        { varsIgnorePattern: '.*', args: 'none' },
      ],
      // 禁用默认的 no-unused-vars 规则，避免冲突
      '@typescript-eslint/no-unused-vars': 'off',

      // Vue 规则
      'vue/attributes-order': 'off', // 关闭对 HTML 属性顺序的强制要求。
      'vue/one-component-per-file': 'off', // 允许一个文件中定义多个 Vue 组件。
      'vue/attribute-hyphenation': 'off', // 关闭对属性名使用连字符（kebab-case）的强制要求。
      'vue/require-default-prop': 'off', // 关闭对 props 默认值的强制要求。
      'vue/multi-word-component-names': [
        'error',
        // 强制组件名使用多个单词（如 MyComponent.vue），并允许忽略 index.vue。
        { ignores: ['Header', 'Footer', 'Empty', 'index', 'tools', 'payment', 'scene', 'authorization'] },
      ],
      'vue/html-self-closing': [
        'error', // 强制 HTML 自闭合标签的使用规则。
        {
          html: {
            void: 'always',
            normal: 'never',
            component: 'always',
          },
          svg: 'always',
          math: 'always',
        },
      ],
    },
  },
  {
    // 针对 TypeScript 文件的配置
    files: ['**/*.js', '**/*.ts'],
    languageOptions: {
      parser: parserTs,
      ecmaVersion: 2021,
      sourceType: 'module',
      globals: {
        ...globals.browser,
      },
    },
    plugins: {
      '@typescript-eslint': tsEslint,
      'unused-imports': pluginUnusedImports,
    },
    rules: {
      // 强制使用 import type 语法
      '@typescript-eslint/consistent-type-imports': ['error', { fixStyle: 'inline-type-imports' }],
      '@typescript-eslint/no-explicit-any': 'warn', // 允许使用 any 类型

      // 自动移除未使用的导入
      // 'unused-imports/no-unused-imports': 'warn', // 强制删除未使用的导入
      'unused-imports/no-unused-vars': [
        'warn',
        {
          vars: 'all',
          varsIgnorePattern: '^_', // 忽略以下划线开头的变量
          args: 'after-used',
          argsIgnorePattern: '^_', // 忽略以下划线开头的函数参数
        },
      ],
      // 禁用默认的 no-unused-vars 规则，避免冲突
      '@typescript-eslint/no-unused-vars': 'off',
    },
  },
  // 5. 忽略文件（替代原来的.eslintignore）
  {
    ignores: [
      '*.sh',
      'node_modules/',
      'lib/',
      '*.md',
      '*.woff',
      '*.ttf',
      '.vscode/',
      '.idea/',
      'dist/',
      'public/',
      '/docs',
      '.husky',
      '.local',
      '.localhost',
      '/bin',
      'Dockerfile',
      'src/assets',
    ],
    languageOptions: {
      ecmaVersion: 2021,
      sourceType: 'module',
    },
  },
]
